Micron Document
____ _ _ _ _
| _ \ ___ | |_ (_) _ __ ___ __| | (_) __ _
| |_) | / _ \ | __| | | | '_ \ / _ \ / _| | | | / _ |
| _ < | __/ | |_ | | | |_) | | __/ | (_| | | | | (_| |
|_| \_\ \___| \__| |_| | .__/ \___| \__,_| |_| \__,_|
|_|


The NomadNet German Wikipedia | Archives | Info
- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b

🔍 Search

¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

Clojure
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
top
Clojure [] ist ein moderner Lisp-Dialekt, der interaktive Entwicklung unterstützt. Die Sprache fördert einen funktionalen Stil, der nebenläufige Programmierung stark vereinfacht. Clojure läuft in der Java Virtual Machine und ist eng mit der Java Runtime integriert. Eine JavaScript-Implementierung mit dem Namen ClojureScript sowie eine CLR-Implementierung existieren ebenso. Das Makrosystem ist mit dem anderer Lisp-Umgebungen vergleichbar, unterstützt jedoch (anders als etwa Common Lisp) keine Reader-Macroscite-ref-3[3].

Gängige Hilfsmittel zur Paketverwaltung und zur Kompilierung von Clojure-Programmen sind tools.build, Leiningen oder Boot.cite-ref-4[4]

Contents


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Beispiele

Vollständige Hallo-Welt-Programme:

textuell im Lisp-Stil:

(println "Hallo Welt!")

grafisch mit Hilfe der Java-Bibliothek Swing:

(javax.swing.JOptionPane/showMessageDialog nil "Hallo Welt!")

Die Fakultäts-Funktion als Beispiel für Rekursion in Clojure:

(defn factorial [n]
"tail recursive version of n!"
(loop [cur n, acc 1]
(if (<= cur 1)
acc
(recur (dec cur) (*' cur acc)))))

Die Fakultäts-Funktion durch Verwendung von Funktionen höherer Ordnung:

(defn fac [n]
(reduce *' (range 1 (inc n))))

Merkmale von Clojure

• Funktionale Sprache mit einer Lisp-Syntax.
• Dynamische, interaktive Entwicklung in der REPL (Read-eval-print loop).
• Neben der in Lisp klassischen Liste unterstützt die Syntax Vektoren, assoziative Arrays und Mengen.
• Die Abstraktion der Folge (sequence) erlaubt es, alle diese Datenstrukturen uniform mit denselben Funktionen zu verwenden. Folgen werden typischerweise verzögert (lazy) ausgewertet.
• Alle Datenstrukturen sind Werte (immutable).
• Zustandsbehaftete Daten werden in Clojure durch spezielle Typen realisiert (atoms und refs). Der konkurrierende Zugriff auf Variablen mit veränderlichen Werten wird mittels STM (software transactional memory) durch das Laufzeitsystem der Sprache synchronisiert. Die Konzepte entsprechen der Multiversion Concurrency Control, wie sie in Datenbankmanagementsystemen verwendet werden (exakt so wie in Oracle).
• Clojure wird zu Java-Bytecode kompiliert und in der Java Virtual Machine ausgeführt. Dadurch ist es möglich, in Clojure jede beliebige Java-Bibliothek zu verwenden, und für sehr viele von diesen gibt es (oft schmale) Wrapper-Bibliotheken in Clojure.
• Neben Clojure gibt es ClojureScript, eine Sprache, die Konzept und Syntax mit Clojure teilt. Clojurescript wird zu JavaScript kompiliert.

Homoikonizität

Als Lisp-Dialekt spielt das Prinzip Code als Daten bzw. Homoikonizität eine wichtige Rolle. Das Makrosystem von Clojure beruht auf dieser Eigenschaft und erlaubt so Metaprogrammierung. Konkret kann Clojure davon profitieren, indem es Eigenschaften, die in anderen Programmiersprachen fest integriert sind, als Bibliotheken zur Verfügung stellt. Als Beispiele seien hier Pattern Matchingcite-ref-5[5] und ein Typsystemcite-ref-6[6] genannt.

IDE-Unterstützung

• Light Table ist eine interaktive IDE mit Clojure-Unterstützung.cite-ref-7[7]
• Für IntelliJ IDEA gibt es das Plugin Cursive.cite-ref-8[8]
• Für Eclipse gibt es Counterclockwisecite-ref-9[9] (seit 2018 nicht mehr gewartet).
• Eine ClojureCLR-Erweiterung für Visual Studio ist vsClojure.cite-ref-10[10]
• Für Emacs sind Clojure-Modecite-ref-11[11] und CIDERcite-ref-12[12] verfügbar.
• Für Vim gibt es VimClojure.cite-ref-13[13]
• Für Visual Studio Code gibt es Clojurecite-ref-14[14] oder Calva.cite-ref-15[15]
• Für Sublime Text gibt es Clojure Sublimed.cite-ref-16[16]

Literatur

• Alex Miller mit Stuart Halloway und Aaron Bedra: Programming Clojure – Third Edition. Pragmatic Programmers, 2018, ISBN 978-1-68050-246-6.
• Rich Hickey: The Clojure programming language. In: Dynamic Languages Symposium archive, Proceedings of the 2008 symposium on Dynamic languages. Juli 2008, ISBN 978-1-60558-270-2, doi:10.1145/1408681.1408682.
• Stefan Kamphausen, Tim Oliver Kaiser: Clojure. dpunkt.verlag, 2010, ISBN 978-3-89864-684-0.
• Carin Meier: Living Clojure. O’Reilly, 2015, ISBN 978-1-4919-0904-1.
• Chas Emerick, Brian Carper und Christophe Grand: Clojure Programming. O’Reilly, 2012, ISBN 978-1-4493-9470-7.

Weblinks

Commons

: Clojure

– Sammlung von Bildern, Videos und Audiodateien

Wikibooks: Clojure Programming

– Lern- und Lehrmaterialien (englisch)

• Offizielle Website von Clojure
• Clojure Documentation – gemeinschaftlich betriebenes Dokumentationsprojekt
• ClojureDocs – ebenfalls gemeinschaftlich betriebene Sammlung von Dokumentation und Beispielen
• Literatur zu Clojure
Concurrent Programming mit Clojure. In: Linux-Magazin (deutsch)
• Interaktiver Onlineinterpreter für Clojure und ClojureScript zum Ausprobieren
• Vorträge von Rich Hickey über Clojure

Einzelnachweise

cite-note-11. Clojure Downloads
cite-note-22. Rich Hickey: Books that influenced Clojure. 30. Juni 2009, abgerufen am 24. August 2010 (englisch).
cite-note-33. Google Group Konversation zu Reader-Macros mit Clojure-Gründer Rich Hickey (in Englisch)
cite-note-44. Clojure for the Brave and True - Appendix B Appendix B: Boot, the Fancy Clojure Build Framework, auf braveclojure.com (englisch)
cite-note-55. core.match, auf github.com
cite-note-66. core.typed, auf github.com
cite-note-77. Light Table, auf lighttable.com
cite-note-88. Cursive
cite-note-99. CounterClockWise IDE, auf github.com
cite-note-1010. vsClojure, auf github.com
cite-note-1111. Clojure-Mode, auf github.com
cite-note-1212. cider, auf github.com
cite-note-1313. VimClojure : A filetype, syntax and indent plugin for Clojure, auf vim.org
cite-note-1414. Clojure, auf marketplace.visualstudio.com
cite-note-1515. Calva, auf marketplace.visualstudio.com
cite-note-1616. Clojure Sublimed - Packages - Package Control. packagecontrol.io, abgerufen am 24. Februar 2022.